//备注：拷贝代码请加上作者信息
//作者：王海涛
//邮箱：1126471088@qq.com
//版本：V1.0.0
/********************************************************
    说明：
    1、可以控制灯、矩阵灯、继电器等。
    2、矩阵IO要使用必须要调用扫描回调函数。
**********************************************************/
#ifndef __IO_CTRL_DRIVER_H__
#define __IO_CTRL_DRIVER_H__

#include "../../BSP/GPIO_BSP/gpio_bsp.h"

/* 注释掉则失能独立IO */
#define Independent_IO
/* 注释掉则失能矩阵IO */
//#define Matrix_IO


/* 独立IO个数 */
#ifdef Independent_IO
#define Independent_IO_Count    3
#else
#define Independent_IO_Count    0
#endif

/* 矩阵IO个数 */
#ifdef Matrix_IO
#define Matrix_Row         5 //矩阵行数
#define Matrix_Col         5 //矩阵列数
#else
#define Matrix_Row         0
#define Matrix_Col         0
#endif

/* IO控制总个数 */
#define IO_Ctrl_Sum_Count       (Independent_IO_Count + Matrix_Row * Matrix_Col)


//独立IO
#define Independent0_GPIO_Port   PortC
#define Independent0_GPIO_Pin    Pin5

#define Independent1_GPIO_Port   PortC
#define Independent1_GPIO_Pin    Pin4

#define Independent2_GPIO_Port   PortA
#define Independent2_GPIO_Pin    Pin7


//矩阵IO
#define Matrix_ROW0_GPIO_Port    PortB
#define Matrix_ROW0_GPIO_Pin     Pin1

#define Matrix_ROW1_GPIO_Port    PortB
#define Matrix_ROW1_GPIO_Pin     Pin1

#define Matrix_ROW2_GPIO_Port    PortB
#define Matrix_ROW2_GPIO_Pin     Pin1

#define Matrix_ROW3_GPIO_Port    PortB
#define Matrix_ROW3_GPIO_Pin     Pin1

#define Matrix_ROW4_GPIO_Port    PortB
#define Matrix_ROW4_GPIO_Pin     Pin1

#define Matrix_COL0_GPIO_Port    PortB
#define Matrix_COL0_GPIO_Pin     Pin1

#define Matrix_COL1_GPIO_Port    PortB
#define Matrix_COL1_GPIO_Pin     Pin1

#define Matrix_COL2_GPIO_Port    PortB
#define Matrix_COL2_GPIO_Pin     Pin1

#define Matrix_COL3_GPIO_Port    PortB
#define Matrix_COL3_GPIO_Pin     Pin1

#define Matrix_COL4_GPIO_Port    PortB
#define Matrix_COL4_GPIO_Pin     Pin1


typedef enum
{
    IO_Ctrl0 = 0,
    IO_Ctrl1,
    IO_Ctrl2,
    IO_Ctrl3,
    IO_Ctrl4,
    IO_Ctrl5,
    IO_Ctrl6,
    IO_Ctrl7,
    IO_Ctrl8,
    IO_Ctrl_ALL=255,
}WHT_IO_Ctrl_enum;

typedef enum
{
    IO_Ctrl_OFF = Hig,//关
    IO_Ctrl_ON  = Low,//开
}WHT_IO_Ctrl_State_enum;


void WHT_IO_Ctrl_Init(void);
void WHT_IO_Ctrl_Set_Value(WHT_IO_Ctrl_enum number, WHT_IO_Ctrl_State_enum state);
#ifdef Matrix_IO
void WHT_IO_Ctrl_Scan_Matrix_Callback(void);
#endif 

#endif /* __IO_CTRL_DRIVER_H__ */
